import axios from 'axios'
import router from "@/router";
import ElementUI from 'element-ui';

const request = axios.create({
    // 斜杆代替，写完整的也行
    baseURL: window.up, //统一前缀
    timeout: 500000  //请求时间
})

// 请求白名单，如果请求在白名单里面，将不会被拦截校验权限
const whiteUrls = ["/user/login", '/user/register']

// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token，对请求参数统一加密
request.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';

    let user = localStorage.getItem("user") ? JSON.parse(localStorage.getItem("user")) : null
    if (user) {
        config.headers['token'] = user.token;  // 设置请求头
    }


    if (!whiteUrls.includes(config.url)) {  // 校验请求白名单
        //当用户没有登入请求其它数据时
        // 取出sessionStorage里面缓存的用户信息
        let userJson = localStorage.getItem("user")
        if (!userJson) {
            ElementUI.Message.error("请登入")
            router.push("/login")

        }
    }
    return config
}, error => {
    return Promise.reject(error)
});

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        //去除一层data
        let res = response.data;
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }

        // 当权限验证不通过的时候给出提示
        if (res.code === '401') {
            // ElementUI.Message.error(res.msg)
            // setTimeout(router.push("/login"), 3000)
        }
        return res;
    },
    error => {
        console.log('err' + error) // for debug
        //  给返回值修改为里层我们定义的消息
        if(error.response.data) {
            error.message = error.response.data.msg
        }
    /*    //需要登入
        if(error.response.status === 401) {
            //  清空用户信息
            store.commit("REMOVE_INFO")
            router.push("/login")
        }*/
        //显示错误信息
        Element.Message.error(error.message, {duration: 3 * 1000})
        return Promise.reject(error)
    }
)


export default request

